home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr50 / bcc101.zip / 100WAYS.TXT next >
Text File  |  1993-03-02  |  18KB  |  390 lines

  1.  
  2.  
  3.                 100 ways PowerBASIC 3.0 beats QuickBasic
  4.                 ========================================
  5.  
  6.    1- PB3 directly creates TSR (terminate/stay-resident) programs which can
  7.       "pop-down" to a memory image of 4K!  Memory resident programs can be
  8.       activated by practically any stimulus:  a hot key, timer, inactivity,
  9.       a hardware or software interrupt, even a message from a foreground
  10.       program.  In fact, it's possible for multiple TSRs to activate each
  11.       other repeatedly, with two-way communication throughout.  No other 
  12.       language offers this capability as an integral part of the compiler.
  13.  
  14.    2- PB3 uses all real mode memory for dynamic strings.  It's the first 
  15.       and only Basic with a no-limit, handle-based string memory manager;
  16.       QB is limited to substantially less than 64k, and PDS has "inside" 
  17.       segmentation limits (<64k per module, per sub-program, etc.) 
  18.  
  19.    3- The PB3 String Memory Manager is a resource available to any user
  20.       code.  Both Basic and Assembler code can allocate, release, and alter
  21.       memory blocks as required by the programmer.  While other compilers
  22.       may allow you to calcluate string location or assignment, none allow
  23.       the full memory management functionality of PowerBASIC.
  24.  
  25.    4- PB3 compiles to true machine code in the integrated environment; the 
  26.       identical code as an .EXE file.  You never need to deal with a slow,
  27.       p-code interpreter as in QB and PDS.  That means faster development, 
  28.       and the elimination of subtle differences between interpreted and 
  29.       compiled results. 
  30.  
  31.    5- PB3 offers unsigned integer variable types: BYTE, WORD, DOUBLE WORD.
  32.       (byte: 0-255   word: 0-65,535   dword: 0-4,294,967,295).  Unsigned
  33.       integers are not available in other Basic compilers.
  34.  
  35.    6- Optionally, PB3 can require that all variables be declared before use; 
  36.       this option greatly enhances the probability of catching "typos"
  37.       automatically during compilation.
  38.  
  39.    7- Dual Monitor Support is offered in both the PowerBASIC Integrated
  40.       Environment and the PBD Standalone debugger.  This allows the
  41.       programmer to simultaneously view a full screen of source code and
  42.       debug information alongside a second full screen generated by the
  43.       target program.  Annoying screen flashes and pauses are eliminated.
  44.  
  45.    8- PowerBASIC is DesqView aware.
  46.  
  47.    9- As an enhancement to user-defined TYPES, PowerBASIC is the first Basic
  48.       compiler to offer user-defined UNIONS as well.
  49.  
  50.   10- PB3 offers 64-bit signed integer variables types.  Quad-word integers
  51.       are not available in other Basic compilers.
  52.  
  53.   11= With PowerBASIC, there is no need to maintain numerous sets of
  54.       libraries.  Other compilers require one set of run time libraries for 
  55.       near strings, another for far strings, and still another for each of 
  56.       the floating point options.  Then you need Quick Libraries for work
  57.       in the IDE, but Link Libraries to create an .EXE.  With PowerBASIC,
  58.       there's no more confusion:  All run time libraries are built into
  59.       the compiler, and PB3 selects them automatically!  Furthermore, the 
  60.       built-in PowerBASIC linker recognizes the same object modules, units, 
  61.       and libraries, whether you're running in the IDE or creating an .EXE.
  62.  
  63.   12- PB3 offers a USING$ function, which may be referenced in any string
  64.       expression.  It duplicates the numeric and text formatting capability
  65.       of PRINT USING, but allows the result to be saved or modified, rather
  66.       than require immediate printing.
  67.  
  68.   13- PB3 offers extended precision (80-bit) floating point variable types.
  69.  
  70.   14- The PRINT USING and USING$ functions in PB3 may be dynamically altered
  71.       to format numeric values with leading zeros, or other special
  72.       characters.  Further, currency characters ("$,.") may be easily
  73.       adapted to non-USA standards when needed.
  74.  
  75.   15- PB3 offers conditional compilation directives ($IF/$ELSE/$ENDIF) to
  76.       allow easy version control, as well as large comment blocks in your
  77.       source code.
  78.  
  79.   16- PB3 supports HUGE arrays (total data size > 64k) on a selective basis.
  80.       Unlike other Basic compilers, the extra overhead of huge array
  81.       calculation is only applied to those arrays which require it.
  82.  
  83.   17- PB3 supports fixed-point BCD variable type with variable precision
  84.       from 0-18 digits, not a forced 4 digits which introduces additional
  85.       round-off errors.
  86.  
  87.   18- PB3 supports floating point BCD variable type.
  88.  
  89.   19- PB3 offers built-in array manipulation functions:  ARRAY SORT,
  90.       ARRAY SCAN, ARRAY INSERT, and ARRAY DELETE.
  91.  
  92.   20- PB3 offers a full-functioned, built-in assembler.  Critical sections
  93.       of a program can easily be hand-optimized to provide the utmost
  94.       performance, as Assembler and Basic can be intermixed line-by-line.
  95.  
  96.   21- PB3 won't run out of memory compiling the largest programs.  It
  97.       automatically uses EMS, XMS, and VMS virtual disk memory.
  98.  
  99.   22- User-defined TYPE arrays need not be a power of two in element
  100.       size in order to exceed 128k of data space.
  101.  
  102.   23- The PB3 program editor offers the capability to read and write
  103.       blocks of text to external disk files.
  104.  
  105.   24- PB3 supports source-level metastatements for all compilation
  106.       switches.
  107.  
  108.   25- VIEW TEXT supports scrollable rectangular text view ports.
  109.  
  110.   26- PEEK and POKE extensions support byte, integer, and long integer.
  111.  
  112.   27- PEEK$ and POKE$ extensions support memory block moves or assignment.
  113.  
  114.   28- FLUSH will force all buffered data to be written to a disk file,
  115.       while minimizing the overhead of a file close and re-open.
  116.  
  117.   29- PowerBASIC offers MIN and MAX functions which allow a variable
  118.       number of arguments:  PRINT MIN(a%,b%,c%,d%)
  119.  
  120.   30- BIT operations include shift, rotate, set, reset, toggle, test.
  121.  
  122.   31- BIT arrays up to 512k bits are implicitly supported.
  123.  
  124.   32- CHR$ allows a variable number of arguments.  CRLF$ = chr$(13,10)
  125.  
  126.   33- Optional procedural math package offers faster calculation
  127.       (improvement of 40% to 500%) when no numeric co-processor is
  128.       installed.  Procedural math package uses the 8087 if it is
  129.       available, and can toggle between the emulator/procedural option
  130.       on a statement-by-statement basis for the highest optimization.
  131.       Procedural package adheres to IEEE floating-point standard.
  132.  
  133.   34- Flex string variable type offers fixed-length strings which may
  134.       be sized dynamically at run-time.
  135.  
  136.   35- MAP statement allows flex scalar and array variables to be 
  137.       linked together into dynamic data structures, with nesting
  138.       capabilities limited only by available memory.  These data
  139.       structures are created and sized dynamically at the time of
  140.       program execution to offer dynamic data base capabilities.
  141.  
  142.   36- Many string and numeric functions offer the ANY option, such 
  143.       as INSTR("abcde", ANY "cq") returns 3.
  144.  
  145.   37- EXTRACT$ captures that portion of a string up to a sub-string.
  146.  
  147.   38- REPEAT$ creates a string from a repetition of another string.
  148.  
  149.   39- REPLACE substitutes one sub-string for all occurrences of another.
  150.  
  151.   40- REMOVE$ removes all occurrences of a sub-string.
  152.  
  153.   41- VERIFY ascertains that all characters in one string also occur 
  154.       in a second string.
  155.  
  156.   42- TALLY counts the occurrences of a sub-string.
  157.  
  158.   43- LTRIM$/RTRIM$ strip leading/trailing spaces or other characters.
  159.  
  160.   44- STR$(x,y) function specifies y significant decimal digits.
  161.  
  162.   45- ROUND(x,y) rounds off x to y digits past the decimal point.
  163.  
  164.   46- STRPTR/STRSEG return the address of any string variable data.
  165.       Dynamic, Flex, and Fixed-length strings are supported as both
  166.       scalars and arrays.
  167.  
  168.   47- END statement may return an optional error level.
  169.  
  170.   48- ASCII functions avoids error conditions of ASC function, by
  171.       returning -1 if the argument is a zero-length string.
  172.  
  173.   49- Integer divide, MOD, AND, OR, XOR, EQV, and IMP are valid
  174.       on all numeric values in the range of a quad-word (64-bit)
  175.       integer (+/- 2^63-1).
  176.  
  177.   50- PB3 optionally generates 80286/80386 specific code.
  178.  
  179.   51- Library stripping for ambiguous library functions is controlled
  180.       directly by meta-statements or menu choices, rather than the 
  181.       necessity of complex linker commands.
  182.  
  183.   52- Separate compilation via unit modules is simpler, faster, and
  184.       offers standard PUBLIC/EXTERNAL statements.
  185.  
  186.   53- Assembler object modules may be linked via $LINK meta-statements.
  187.  
  188.   54- Executable files are generated directly rather than complex
  189.       shells to a compiler and linker, resulting in faster compilation.
  190.  
  191.   55- A full complement of error checks can easily enabled or
  192.       disabled, including STACK, NUMERIC, OVERFLOW, and BOUNDS.
  193.  
  194.   56- The PowerBasic editor doesn't alter capitalization or spacing,
  195.       and doesn't insert or remove code from the source program.
  196.  
  197.   57- Line continuation characters are supported inside and ouside of
  198.       the IDE.
  199.  
  200.   58- Identical code, just as efficient, is generated when error
  201.       trapping is enabled.  Other compilers generate larger, slower
  202.       code whenever a program includes an ON ERROR GOTO clause.  This
  203.       is a serious factor often overlooked in published benchmarks.
  204.  
  205.   59- PowerBasic supports a single-line if/then/else statement which
  206.       is 100% compatible with BASICA/GW-BASIC.  Other Basics force this
  207.       code to be re-written.
  208.  
  209.   60- PowerBasic performs short-circuit expression evaluation in
  210.       boolean expressions.
  211.  
  212.   61- Interpreted print: the user chooses graphic character or
  213.       interpreted actions for special ascii characters.
  214.  
  215.   62- MTIMER function provides microtimer accuracy.
  216.  
  217.   63- INSTAT function tests for a keypress without removing it from
  218.       the keyboard buffer.
  219.  
  220.   64- INCR and DECR statements are offered for all numeric data types.
  221.  
  222.   65- Forward references to DEF FN, SUB, and FUNCTION are allowed.
  223.  
  224.   66- $SEGMENT allows multiple segments of module level code within
  225.       the same source file.  There is no requirement to split your
  226.       program into multiple modules as your program size increases.
  227.  
  228.   67- EXP2, EXP10, LOG2 and LOG10 are supported.
  229.  
  230.   68- CEIL function returns the smallest integer greater or equal to n.
  231.  
  232.   69- CALL INTERRUPT is built right into the PowerBASIC language.  There's
  233.       no need to load a special library in order to access this capability.
  234.  
  235.   70- FRAC function returns the fractional part of n.
  236.  
  237.   71- FIX function returns the whole number part of n.
  238.  
  239.   72- ISTRUE and ISFALSE Boolean operators force true and false values
  240.       to -1 and 0 respectively.
  241.  
  242.   73- ITERATE forces a new iteration of a loop.
  243.  
  244.   74- PB3 offers absolute arrays at any specific memory location.
  245.  
  246.   75- EXIT FAR provides a controlled, multi-level SUB/FUNCTION
  247.       exit - a safe, yet powerful enhancement to the SETJMP and
  248.       LONGJMP functions found in C compilers.  This allows you to
  249.       exit a SUB/FUNCTION, and immediately branch to the label most
  250.       recently specified as an EXIT FAR destination in any "parent"
  251.       procedure with any number of intervening procedure calls.  All
  252.       temporaries and local variables are released as necessary, so
  253.       this is readily usable for special exception-processing.  EXIT
  254.       FAR constructs may be nested to any level.
  255.  
  256.   76- CODEPTR and CODESEG functions allow you to obtain the offset
  257.       and Segment of any SUB, FUNCTION, or LABEL in the program.
  258.       This capability, unavailable in other Basics, is essential
  259.       for interrupt handlers and certain other assembler code.
  260.  
  261.   77- A standalone debugger (PBD.EXE) is included with PowerBASIC 3.0.
  262.  
  263.   78- The PB3 Librarian (PBLIB.EXE) constructs libraries which may
  264.       include both industry-standard object modules (.obj), as well as
  265.       highly efficient binary unit modules (.pbu) constructed by the
  266.       PowerBASIC compiler.
  267.  
  268.   79- Internal assembler code can access all PowerBASIC variables (even
  269.       local and static variables), as well as subs, functions, and labels.
  270.  
  271.   80- $ALIAS metastatement allows the name of the main data segment to be
  272.       redefined for external object modules.
  273.  
  274.   81- BITS function allows fast, one-step conversion between signed and
  275.       unsigned representations of a numeric value.
  276.  
  277.   82- Internal procedures ARRAYCALC and ARRAYINFO are provided so that
  278.       assembler code can manipulate all aspects of PowerBASIC arrays.
  279.  
  280.   83- PowerBASIC offers the option to preserve or discard the GOSUB stack
  281.       at the current SUB/FUNCTION level in case of a trapped error.  If
  282.       the choice is to discard it, substantially more efficient code can
  283.       be generated.
  284.  
  285.   84- PowerBASIC functions can be called just as if they were a SUB, and
  286.       the returned result is discarded.
  287.  
  288.   85- CLS statement offers options to clear the text viewport, the graphics
  289.       viewport, the key line, or the entire screen.
  290.  
  291.   86- ERRTEST function returns the current error number, while resetting it
  292.       to zero for future calls.  This provides an efficient means of error 
  293.       polling when using ON ERROR RESUME NEXT to mask system errors.
  294.  
  295.   87- FILEATTR function can optionally return the open/closed status of a
  296.       particular file number, as well as the record length of a random file.
  297.  
  298.   88- KEY statement now offers an optional third parameter which allows the
  299.       programmer to define any shift keys which should be ignored in
  300.       determining if ON KEY GOSUB should be called.  With other Basics,
  301.       it's necessary to declare numerous key statements to cover every
  302.       possible combination of shift keys., or else an errant "caps lock"
  303.       or "num lock" key can cause a defined hot-key to be ignored.
  304.  
  305.   89- NAME statement allows renaming of directories as well as files.
  306.  
  307.   90- Serial communication is supported at baud rates up to 115200.  Other
  308.       Basics are limited to 9600.
  309.  
  310.   91- DIR$ function allows you to read directory items with any attribute,
  311.       not just normal files:  sub-directories, volumes, hidden/system files.
  312.  
  313.   92- OPEN COM supports the DT option which causes DTR to be asserted after
  314.       the communications file is closed.
  315.  
  316.   93- PowerBASIC supports direct access to COM3 and COM4.
  317.  
  318.   94- OPTION BINARY BASE allows the programmer to choose binary file access
  319.       based at zero or one, depending upon the program logic.
  320.  
  321.   95- PowerBASIC provides documented Basic and Assembler access to numerous
  322.       internal system variables.  This provides easy access to the cpu type,
  323.       co-processor type, cursor shape and visibility, PB revision, screen
  324.       page and attributes, video card, print using format characters, 
  325.       screen/viewport size, and much more.
  326.  
  327.   96- BIN$ function returns the binary representation of a number.
  328.  
  329.   97- GET$ statement reads a binary file, assigning a specified number of
  330.       bytes to a string variable.
  331.  
  332.   98- PUT$ statement writes a string expression to a binary file.
  333.  
  334.   99- DELAY statement pauses program execution for n seconds without the
  335.       possibility of interrupt by a keystroke.
  336.  
  337.  100- While PowerBASIC offers a large superset of the functionality found
  338.       in other compilers, moving up to PowerBASIC 3.0 couldn't be easier!
  339.       PB3 is 99+% compatible with QuickBasic syntax, and our Programmer's
  340.       Guide devotes a chapter to the minor differences which remain.
  341.  
  342.  
  343.                 PowerBASIC . . . it's not your basic BASIC!
  344.  
  345.  
  346.  
  347.                         Check List
  348.                         ==========
  349.  
  350. Feature                                        PB 3.0  QB 4.5  PDS 7.1  VBDOS
  351. =======                                        ======  ======  =======  =====
  352.  
  353. TSR programming support built-in                  X
  354. Internal Assembler in the language                X
  355. Option to require variable declaration            X                      X
  356. Unsigned byte, word, dword integer variables      X
  357. User-Defined TYPES                                X       X       X      X
  358. User-Defined UNIONS                               X
  359. User-Defined Dynamic Data Structures (MAPS)       X
  360. Array sort, scan, insert, delete statement        X
  361. Pointers to a sub, function, or label             X
  362. EXIT FAR multi-level sub/function exit            X
  363. Unlimited dynamic string space <1>                X
  364. ON LOCAL ERROR                                    X               X      X
  365. Standalone debugger included                      X               X      X
  366. Editor never changes your source programs         X
  367. Conditional compilation ($IF/$ELSE/$ENDIF)        X
  368. Viewport for screen text display                  X                      X
  369. Alternate procedural math package                 X               X      X
  370. Procedural math package utilizes 8087             X
  371. Extended 80-bit floats & 64-bit integers          X
  372. Floating point BCD variables                      X
  373. Fixed point BCD variables  <2>                    X               X      X
  374. Block memory moves with PEEK$/POKE$               X
  375.  
  376.  
  377. <1> PowerBASIC can allocate all real mode memory for any and all dynamic
  378.     strings.  There are no "inside limits" (such as 64k limit per module
  379.     or sub-program) as are found in far string implementations.
  380.  
  381. <2> PowerBASIC Fixed-Point BCD variables are implemented as 64-bit scaled
  382.     integers for computational efficiency.  The decimal digits (to the right
  383.     of the decimal point) may be user-defined from 0 to 18.  Some Microsoft 
  384.     products offer a currency data type, which is fixed at 4 decimal places.  
  385.     Even though the internal format is identical to that of PowerBASIC, 
  386.     additional round-off code is typically required in financial calculations
  387.     to correct the precision to standard dollars/cents levels.  Since this 
  388.     binary-coded-decimal format differs from traditional "natural bcd", 
  389.     Microsoft contends that their products do not support BCD variables.
  390.